import axios from 'axios';
import QS from 'qs';
import { Message, Loading } from 'element-ui';
import Vue from 'vue';
let loading;
function startLoading() {    //使用Element loading-start 方法
    loading = Loading.service({
        lock: true,
        text: '加载中……',
        background: 'rgba(0, 0, 0, 0.7)'
    })
}
console.log('亚美工单项目+', '写于axios/http' + '当前版本更新于03311600')

function endLoading() {    //使用Element loading-close 方法
    loading.close()
}
if (process.env.NODE_ENV == 'development') {
    // Vue.prototype.$prefix = 'http://210.21.48.72:8087';    //上传接口
    // axios.defaults.baseURL = 'http://210.21.48.72:8087';
     Vue.prototype.$prefix = 'http://10.15.30.196:8087';    //上传接口
     axios.defaults.baseURL = 'http://10.15.30.196:8087';
}
else if (process.env.NODE_ENV == 'debug') {

}
else if (process.env.NODE_ENV == 'production') {
    Vue.prototype.$prefix = 'dev-api';//上传接口
    axios.defaults.baseURL = 'dev-api';//发请求默认网址
    // Vue.prototype.$prefix='http://210.21.48.72:8087';//上传接口
    // axios.defaults.baseURL = 'http://210.21.48.72:8087';//发请求默认网址

    // Vue.prototype.$prefix='http://210.21.48.72:8078';//上传接口
    // axios.defaults.baseURL = 'http://210.21.48.72:8078';//发请求默认网址
}
axios.defaults.timeout = 300000;
// axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
axios.interceptors.request.use(
    config => {
        const USER_TOKEN = window.sessionStorage.getItem('user') && JSON.parse(window.sessionStorage.getItem('user')) ? JSON.parse(window.sessionStorage.getItem('user')).data.token : '';
        startLoading()
        if (USER_TOKEN) {
            config.headers.Authorization = USER_TOKEN;// JSON.parse(USER_TOKEN).obj.token;
        }
        return config;
    },
    error => {
        return Promise.error(error);
    }
);
// 响应拦截器
axios.interceptors.response.use(
    response => {
        endLoading()
        // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据 
        // 否则的话抛出错误
        // console.log(response)
        if (response.status === 200) {
            //  endLoading();
            if (response.request.response) {
                var obj = JSON.parse(response.request.response);
                if (obj && obj.state != 200) {
                    Message.error(obj.msg)//抛出错误
                }
            }
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    // 服务器状态码不是2开头的的情况
    // 这里可以跟你们的后台开发人员协商好统一的错误状态码 
    // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
    // 下面列举几个常见的操作，其他需求可自行扩展
    error => {
        endLoading();
        // if (error.response.status) {
        if (error.status) {
            //  switch (error.response.status) { 
            // 401: 未登录
            // 未登录则跳转登录页面，并携带当前页面的路径
            // 在登录成功后返回当前页面，这一步需要在登录页操作。  
            // case 401:   
            // console.log("401错误")
            //   router.replace({   
            //   path: '/login',   
            //   query: { 
            //    redirect: router.currentRoute.fullPath 
            //   }
            //   });
            // break;
            // 403 token过期
            // 登录过期对用户进行提示
            // 清除本地token和清空vuex中token对象
            // 跳转登录页面  
            //  case 403:
            //  console.log("403错误");
            //   Toast({
            //   message: '登录过期，请重新登录',
            //   duration: 1000,
            //   forbidClick: true
            //   });
            //   // 清除token
            //   localStorage.removeItem('token');
            //   store.commit('loginSuccess', null);
            // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面 
            //   setTimeout(() => {   
            //   router.replace({    
            //    path: '/login',    
            //    query: { 
            //    redirect: router.currentRoute.fullPath 
            //    }   
            //   });   
            //   }, 1000);   
            // break;
            // 404请求不存在
            //  case 404:
            //  console.log("404错误");
            //   Toast({
            //   message: '网络请求不存在',
            //   duration: 1500,
            //   forbidClick: true
            //   });
            //   break;
            //  case 405:
            //   console.log("405错误");
            //   break;
            //   case 500:
            //   console.log("500错误");
            //   break;
            // 其他错误，直接抛出错误提示
            //  default:
            //   Toast({
            //   message: error.response.data.message,
            //   duration: 1500,
            //   forbidClick: true
            //   });
            //  }
            return Promise.reject(error.response);
        }
    }
);

export default {
    get: function get(url, params) {
        return new Promise((resolve, reject) => {
            axios.get(url, {
                params: params
            }).then(res => {
                resolve(res.data);
            }).catch(err => {
                reject(err.data)
            })
        })
    },
    post: function post(url, params) {
        return new Promise((resolve, reject) => {
            axios.post(url, QS.stringify(params))
                .then(res => {
                    resolve(res.data);
                })
                .catch(err => {
                    reject(err.data)
                })
        });
    }
}
